package com.multi.tool;

/**
 * 指令重排
 * <p>
 * 运行结果可能为(1,0)、(0,1)或(1,1)，也可能是(0,0)。
 * <p>
 * 因为，在实际运行时，代码指令可能并不是严格按照代码语句顺序执行的。
 * 大多数现代微处理器都会采用将指令乱序执行（out-of-order execution，简称OoOE或OOE）的方法，
 * 在条件允许的情况下，直接运行当前有能力立即执行的后续指令，避开获取下一条指令所需数据时造成的等待3。
 * 通过乱序执行的技术，处理器可以大大提高执行效率。而这就是指令重排。
 *
 * @author zhengpeng.wang
 */
public class PossibleReordering {

    static int x = 0, y = 0;
    static int a = 0, b = 0;

    public static void main(String[] args) throws InterruptedException {
        Thread one = new Thread(() -> {
            a = 1;
            x = b;
        });
        Thread other = new Thread(() -> {
            b = 1;
            y = a;
        });
        one.start();
        other.start();
        one.join();
        other.join();
        System.out.println(" (" + x + "," + y + ")");
    }
}